﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Database;

namespace Fabrica10.Negocios
{
    public class NotificacaoAtendimento
    {
        public void ReceberInicioAtendimento(int idFuncionario, string idPaciente)
        {
            var ctx = new DataClasses1DataContext();
            var qry = from m in ctx.Funcionarios
                      where m.Id == idFuncionario && m.Ativo == true && m.TipoFuncionario == 0 //medico
                      select m;

            var funcionario = qry.Single();
            var inicioAtendimento = DateTime.Now;

            if (funcionario == null || !funcionario.Ativo || funcionario.AtendimentoPaciente != null)
              throw new Exception("Funcionário inválido");

            funcionario.AtendimentoPaciente = idPaciente;
            funcionario.HorarioAtendimento = inicioAtendimento;
            
            //>update db
            ctx.SubmitChanges();
        }

        public void ReceberFimAtendimento(int idFuncionario, string idPaciente)
        {
            var fimAtendimento = DateTime.Now;
            decimal horasTrabalhadas;

            GerarCalculoDespesa calc = new GerarCalculoDespesa();
            var ctx = new DataClasses1DataContext();

            var qry = from f in ctx.Funcionarios
                      where f.Id == idFuncionario
                      select f;

            var funcionario = qry.Single();


            if (funcionario.HorarioAtendimento == null || funcionario == null || !funcionario.Ativo || funcionario.AtendimentoPaciente != idPaciente)
            {
                throw new Exception("Funcionário inválido");                
            }
            horasTrabalhadas = (decimal)((fimAtendimento - (DateTime)funcionario.HorarioAtendimento).Hours);
            //>update db
            funcionario.AtendimentoPaciente = null;
            funcionario.HorarioAtendimento = null;
            ctx.SubmitChanges();
            
            //> chamar função de cálculo de pagamento
            calc.ReceberHorasTrabalhadas(idFuncionario,idPaciente,horasTrabalhadas);
        }
    }
}
